DistributeText(X, [Lefts/Rights/Centers/Gaps, [First/Last/pcb_crosshair, First/Last/pcb_crosshair[, Gridless]]])

DistributeText(Y, [Tops/Bottoms/Centers/Gaps, [First/Last/pcb_crosshair, First/Last/pcb_crosshair[, Gridless]]])

As with align, plus:

Gaps | Make gaps even rather than spreading points evenly.
First, Last, pcb_crosshair | Two arguments specifying both ends of the distribution, they can't both be the same.

Defaults are Lefts/Tops, First, Last

Distributed texts always retain the same relative order they had before they were distributed.