Quando fai un controllo asincrono sul submit, non ha senso che usi return true/false sull'onsubmit, l'ascincronia ti sballa tutto. Devi settare un bel return false fisso sull'onsubmit del form e quando tutti i controllo sono stati completati, lanciare manualmente un tuoform.submit() dalla funzione di callback di ajax (che eseguirà anche TUTTI gli altri controlli, anche quelli che non hanno a che fare col tuo database).