Если ожидать лучшего, хотя данная проверка, это минимум, и с таковой браузеры умные уже сами справляются. А вот чего не должен ожидать сервер, так это множество отправлений одной формы. Отправление формы не обязательно быстрый процесс, даже на стадии подключения к серверу могут быть задержки, а клиент может не дождавшись ответа сервера отправить форму вновь. Поэтому как минимальное на стороне клиента нужно блокировать отправление формы на время обмена данными с сервером. Для этого строки 4-8 кода можно переписать так:
var f = this,
s = $(f.elements).last(),
e = s.end().slice(0, -1).removeClass('input-error').filter(function() {
return !$.trim(this.value)
});
перед строкой 13 добавить: s.prop('disabled', 1);, а в success: function(data) добавить: s.prop('disabled', 0);
Строку 13 переписать так: s.end().not(s).addClass('input-success');