Pues al final me he decidido por el patrón del observador, pero nada complejo:
Un TStringlist almacena el nombre de cada "alerta", cada alerta lleva asociado un TObjectList.
Cada elemento del TObjectList es un objeto en el que se puede almacenar:
- Puntero hacia un procedure of object
- Puntero hacia un procedure.
- Tipo de Puntero (define cual de los dos anteriores se ha usado).
- Nombre del observador (para depurar).
Todo queda encapsulado en un TObject con los métodos:
- AddAlert - > se registra un observador
- DeleteAlert-> se elimina un observador
- ExecuteAlert-> se lanza la notificación de una alerta determinada a todos sus observadores
- AlertsNamesAndObservers -> Depuración: muestra todos los nombres de las alertas, el total de observadores y el nombre de cada uno.
Los 3 métodos iniciales están sobrecargados para llamarlos con un "procedure of object" o con un simple "procedure"
Le veo una pequeña lista de futuros cambios (de momento se queda como está

):
TO DO: - ¿Derivar de TComponent y añadir el FreeNotification?
Razon: Si el usuario del módulo no Elimina la alerta al hacer un .Free de la
ventana donde se encuentra el Callback, al llamar a Execute se
producirá un access violation.
- Añadir CriticalSection ¿?
Saludos y muchas gracias.