Let's build a Staircase
Python 3, 264 Bytes
I'm not good at code golf so I'm confident this won't be the best Python 3 answer. This uses recursion and an ordered dict with all the words for each length.
from collections import*
def f(i):
 d = defaultdict(list)
 for l in i: x = &quot;&quot;.join(c for c in l if c.isalnum());d[len(x)].append(x)
 n = (sorted([&quot;&quot;.join(d[z]) for z in d.keys()], key=len))
 if n == i:return &quot;\n&quot;.join(n)
 return f(n)
print(f(eval(input())))

Takes input from stdin as a list, for example, test it with this list:
['A', 'small', 'one', 'that', 'contains', 'equal', 'length', 'strings', 'for', 'the', 'special', 'rule']

Will output:
A
length
oneforthe
smallequal
stringsspecial
thatrulecontains