I propably didn't read that correctly. The longer the sample, the lazier I get, which is why it's a good idea to strip down examples to their basics.
However, what I think is going on is this:
Firstly, an AJAX element does a form submit, subject to the usual JSF rules. Meaning that for whatever fields the form contains, ALL submitted fields MUST be valid or nothing works. With AJAX the effective number of fields in the submitted form can be adjusted (for example, to only submit the email field itself), but I can't remember what the defaults are on that tag, so I recommend that you check the official docs to make sure you're doing it the way you need to.
In the case of a commandButton, the ENTIRE form is submitted and instead of partial page rendering, you get a full-page render of the response. And, as before, ALL fields on the form must be valid or the submit is rejected.
I don't use AJAX for Cancel buttons normally. The stock h:commandButton with "immediate=true" works pretty much the same way.
You should verify that "onclick" isn't supposed to return a value. I know that the "submit=" attribute must return true or false because returning false suppresses the actual submit part of the button operation.