This is my second attempt at generating dance animation with a procedural method (I tried it a few years ago). This is not a complex algorithm, nor involved any AI-ish techniques. These characters are controlled with a few of sin curves and Perlin noise functions. The standard humanoid IK rig is used to animate the model.
(Left: Random variations, Right: Synchronized but with random multipliers)