Я бы сделал так. Повесил бы на input file обработчик onchange, в нем бы определил ширину и высоту картинки, и засунул это дело в dataset, а в фильтре уже делал проверку из dataset значений.
$('#FacebookImage').on('change',function(){
var elem = this;
var _URL = window.URL;
var file, img;
if ((file = elem.files[0])) {
img = new Image();
img.onload = function () {
elem.dataset['imageWidth'] = this.width;
elem.dataset['imageHeight'] = this.height;
};
img.src = _URL.createObjectURL(file);
}
});
И теперь в валидатор такой
$.validator.addMethod("data-rule-imageFacebookResolution", function (value, elem, attrValue) {
var width = parseInt(elem.dataset['width']);
var height = parseInt(elem.dataset['height']);
if width < 520 && height < 290) {
return false;
}
return true;
});
Таким образом, получение размеров картинки происходит при выборе файла, а пока пользователь дотянется к кнопке "отправить", картинка уже загрузится, ну или можно еще блокировать кнопку "отправить" пока не произойдет onload картинок.
Код может быть не правильным, я не пробовал, набирал как есть, но думаю мысль ясна.