Currently, when you type nonexistent attribute, you are lost in the battle trying to find what's wrong.
Try this:
<h:commandButton id="commandButton" value="Submit" >
<a4j:ajax onComplete="alert('completed')" />
</h:commandButton>
Neither JSF-RI nor the IDE warn you that you did a mistake and that you should use "oncomplete" instead to show the alert window on completion.
<h:commandButton id="commandButton" value="Submit" >
<a4j:ajax oncomplete="alert('completed')" />
</h:commandButton>
I propose to check this mistakes on level of IDE and trigger warnings where the unknown attributes is used to give user feedback .