обычно примерно так:

Код AS3:
class BaseComponent
{
_isFinalized : Boolean;
public final function destroy():void
{
if(!_isFinalized)
{
finalize();
_isFinalized = true;
}
}
protected function finalize():void
{
//empty
}
}
finalize переопределяется в подклассах и в конце переопределенного метода вызывается его супер версия.
Благодаря такой конструкции можно не опасаться за то, что финализация будет произведена несколько раз.
По теме спора:
Предпочитаю не давать детям самостоятельно удаляться.
При этом при финализации обязательно ремувлю всех детей.