Thanks for the question. Dry stone walls are problematic because there often aren't clearly defined rows which makes them tricky to construct. If you're ok with the rows being visible then you may find this post
useful, it demonstrates how to create a wall with rows of different heights.
If you need a truly randomised look the the best way is to fake it by creating some segments that are made of multiple stones that jigsaw together. As an example (using a fracture modifier) I've created some tetris-like blocks of random stones.
We can then randomise these in an A2S array. The blocks interlock in an attempt to hide visible rows and columns. The more how have the less likely you are to see repetition and in the style you can also use Mirror and Transform operators to create even more randomisation.
The stones have 10 material IDs that can be randomised per segment in RailClone. The final graph looks like this:
It looks more complicated than it is. There are three main areas for each generator. First we randomise the segments (a), these then have padding applied to ensure they jigsaw together correctly (b), and then finally the material IDs are randomised (c). The Material operator can only randomised one ID at a time, so in this example we have a chain of 10 material operators per input, 1 for each ID you need to randomise.
The final result with the randomised segment and materials minimises obvious repetition:
Please feel free to take a look at the attached file and let me know if you have any further question. You may also find this post
useful which is a completely different usage but deals with a somewhat similar problem.