2. We need to be able to define a distance spread for the blocks we are replacing with the schems. I can't for the life of me figure out how #surfacespread works, but I'm sure that would do the trick.
I ended up finding a solution to this issue using the WorldEdit //generate command with the following invocation:
//generate -o stone round(x%(VAR+random()))+round(z%(VAR+random()))==0
The '-o' flag uses the map's coordinate system as a reference (instead of the selection specific coordinate system from -1 .. 1 //generate would use without it).
If a modulo ('%') b = 0 then that a is divisible by b without rest, this helps me define a regular grid with an even distance between points, VAR = b is therefore the variable that determines the density of points along a grid in our selection.
Now, we jitter the points a little by allowing VAR to fluctuate randomly on the x- and z-Axis by the number between 0 and 1 returned by 'random()'
So this gives us the following output for VAR= [2,3,4,5,10,1.2] from left to right!
This, frankly, is good enough for me now, since I wanted to only do this for a monoculture forest. Of course, this could be improved upon! As evident from the left-most panel, there are some nasty artifacts resulting from choosing a rigid grid before jittering. With several trees and thus differing minimal distances, another method would have to be found, one that takes a buffer parameter for each type of tree.
I gotta say, Iwan's solution up top using Perlin noise looks super convincing too (I have no idea how to get there though. nudge nudge wink wink @Iwan )
EDIT: Trying out a bunch of commands today I found that
//generate stone sin(random()*6*pi*x)+sin(random()*6*pi*z)>0.95
Here's the expression syntax conserved for posterity: https://archive.is/JWqhP