Very much agree, almost every time I've seen custom notifications they've been a huge source of pain across the app.
Once your codebase reaches a certain size, an event bus is a very powerful pattern that, if applied correctly, will keep your classes/functions/... decoupled.
Naturally, there is a huge potential for misuse, but that argument probably applies to any design pattern.
Edit: Sorry, just noticed your use of the qualifier "custom" there.