I actually posted a thread relevant to this in the Animation forum a couple weeks ago. Recently, I wrote a class where animationEvents are controlled in the Animator not on the Animation Clips.
The concept comes with a number of benefits where it fires event properly, during animation blends, reliably at 0% and 100% normalized times, and you can even enforce that said events fire even if the animation exited early, theres even an option to allow the events to fire on loop or just on the first iteration. Also works well with the constant iterative approach I have with my animators, in that if they send me an updated Animation I don’t have to go back in and re-add in the Animation Events (since they are binded to the AnimationStates, not the Clips)
The original plan of the StateBehaviourMachine class was to just make sure that an event fired regardless if the animation is getting blended or is on a different animation layer. its easier to ignore superfluous calls than to never get any calls when you need them.