I like it!. I am just exactly there as I want to clean up some code of mine.
Just the looping through T2DEntityArray[] doesn´t really works the way I expected. If you push an object into that array, you create a copy. So every change of - in you example - icon, has no effect on the object in the array. The same problem appears with the parent object of your code. I know it´s not finished, but how are you planning to use the parent object? It is just a capsulated object inside another object, so one obejct can´t be an object itself, maybe in T2DEntityArray[], and a parent object at the same time. You could make list of objects and in the creation process return an index instead of the typeobject itself. That would be sad, because the wonderfull function in types syntax would get lost. And u have to deal with a changed index after deleting an entry from the list.
If you know a way of just making an absolut handle/pointer to that object instead of copying it please let me know.