Попробуйте сменить порядок исполнения кода - сначала валидация, затем отправка, затем done-колбек.
$("form").submit(function(ev) {
var $form = $(this);
// Prevent the form from actually submitting
ev.preventDefault();
var ref = $form.find("[required]");
$(ref).each(function(){
if ( $(this).val() == '' ) {
$('.success-message').hide();
$('.error-message').fadeIn();
$(this).focus();
} else {
$('.error-message').hide();
// Get the post data
var data = $form.serialize();
// Send it to the server
$.post('/', data, function(response) {
$('.success-message').fadeIn().delay(2000).fadeOut();
});
}
});
});