There is a category of live feedback that is fine while typing, and separating it from validation is what unsticks most of these debates.
Progressive requirement lists — a password field showing which rules are met, ticking them off as you go — work well during typing, because they are framed as progress rather than as failure. Nothing is red, nothing says you are wrong; a list is filling in.
Availability checks — username taken or free — are also fine live, because that information genuinely cannot be known until the user types and it does not correspond to a mistake.
The distinction is whether the message says "you have made an error" or "here is the current state". Live state is helpful, live blame is not. Rewriting your email message from an error into a state indicator would fix most of what you saw without changing the timing at all.