У меня мысль пришла, что можно попробовать сделать через CASE type_ OF.
Но, это не очень элегантно, имхо. При добавлении нового типа, поверх базового типа придётся циферки придумывать.
В Компонентном Паскале есть прямая проверка типа, так что в процедуру (теоретически) достаточно передавать просто базовый класс.
И посетила меня ещё одна мысль: а незачем мне все типы определять как указатели. Ведь мне важен только верхний уровень. только он и должен быть указателем. При присвоении NIL всё остальное сборщик мусора подгребёт по полной программе))

Короче, спасибо всем за подсказки, буду пробовать)
Я правильно понимаю, что фактически, в своём примере я предлагаю реализацию фабрики классов?