Что произойдет, если вы поместите вызов .getJSON в функцию обратного вызова успеха .ajaxSetup? Как это:
$.validator.addMethod("nameId",function(value,element){
var result = true;
var pattern = new RegExp(<pattern>);
if(pattern.test(value)){
//get availability via ajax call
$.ajaxSetup({
async: false,
"success": function() {
$.getJSON("<url>",
{
param: value
},
function(data) {
if(condition){
result = true;
}else{
$.validator.messages.nameId = "Msg 1";
result = false;
}
});
},
"error":function() {
alert("error");
}
});
}else{
$.validator.messages.nameId = "Msg 2";
result = false;
}
return result;
},"");