Buenas tardes y feliz fin de semana !
 
Estoy peleandome con esta librería y creo que es muy buena , pero tengo un problema , el formulario se me valida correctamente pero hay algunos valores cómo el dni y el email que verificio si existen en la bd y es obvio que si existen uno u otro , esto lo hago de la siguiente forma.    
Código Javascript
:
Ver original$( ".dni" ).keyup(function() {
      var dni = $('.dni').val();
 
      console.log(dni);
      $.ajax({
                url:   'finddni/'+dni,
                type:  'get',
                success:  function (data) {
          if(data.userfind.length === 0){
            $('.checkdni').empty();
            $('.checkdni').append("Te puedes registrar con este DNI");
          }else{
            $('.checkdni').empty();
            $('.checkdni').append("El DNI ya existe");
          }
                }
      });
    });
  
Me funciona correctamente , pero hay alguna forma de añadirlo a la librería validate ?    
Código Javascript
:
Ver original//form validation rules
            $("#registro").validate({
                debug: true,
                errorElement: "em",
                validClass: "has-success",
                
                    success: function(label) {
                        label.removeClass("error").addClass("success");
                    },
                
                
                rules: {
                    nif: {
                        required: true,
                        esdnivalido: true
                        
                    },
 
                     name: {
                        required: true,
                        minlength:3,
                        onlyletter: true,
                        
                    },
                    surname: {
                        required: true,
                        minlength:3,
                        onlyletter: true
                    },
                    files: {
                        required: true,
                        onlyphotos:true
                    },
                   multiplo: {
                        required: true
                    },
                   
                    comunidades: {
                        required: true
                    },
                    provincias: {
                        required: true
                    },
                    pueblos: {
                        required: true
                    },
                    email: {
                        required: true,
                        valemail:true
                    },
                    password: {
                        required: true,
                        minlength:3
                    },
                    confirmarpassword: {
                        required: true,
                        equalTo: "#password"
                    },
                    presentacion: {
                        minlength:15,
                        required: true
                    }
        
                },
                messages: {
                    nif: {
                        required: "El NIF es obligatorio",
                        minlength: "El NIF tiene que tener una longitud de 9 carácteres",
                    }, 
                    name: {
                        required: "El nombre es obligatorio",
                        minlength:"El nombre tiene que tener una longitud de 3 carácteres"
                    },                  
                    surname: {
                        required: "El apellido es obligatorio",
                        minlength: "El apellido tiene que tener una longitud de 3 carácteres"
                    },
                    files: {
                        required: "La foto de perfil es obligatoria"
                    },
                    multiplo: {
                        required: "La foto de perfil es obligatoria",
                        onlyphotos:"El formato de las fotos es incorrecto"
                    },
                    birthday: {
                        required: "La fecha de nacimiento es obligatorio",
                    },
                    comunidades: {
                        required: "La comunidad autónoma es obligatorio",
                    },
                    provincias: {
                        required: "La província es obligatoria",
                    },
                    pueblos: {
                        required: "El pueblo es obligatorio",
                    },
                    email: {
                        required: "El email es obligatorio",
                    },
                    password: {
                        required: "La contraseña es obligatoria",
                        minlength: "Tu contraseña tiene que tener más de tres carácteres"
                    },
                    
                    confirmarpassword: {
                        required: "Confirmar el password es obligatorio"
                    },
                    presentacion: {
                        required: "El texto de presentación es obligatorio",
                        minlength: "Tiene que a ver un mínimo de 15 carácteres"
                    }
                
 
                },
                
    
                                
                submitHandler: function(form) {
                    form.submit();
                }
            });
        }
    }
    
 
    $.validator.addMethod("esdnivalido", isdniValid, "El formato del DNI no es válido");
        $.validator.addMethod("esformatopreciocorrecto", isdniValid, "El formato introducido no es válido");
 
    function isdniValid(dni, element, param) {
    //value es el valor actual del elemento que se está validando
    //element es el elemento DOM que se está validando
    //param son los parámetros especificados por el método
    //  p. ej. en el caso de minlength="3", param será 3
    //  en caso de que el método no tenga parámetros, param será true
     var numero, let, letra;
    var expresion_regular_dni = /^[XYZ]?\d{5,8}[A-Z]$/;
 
    dni = dni.toUpperCase();
 
    if(expresion_regular_dni.test(dni) === true){
        numero = dni.substr(0,dni.length-1);
        numero = numero.replace('X', 0);
        numero = numero.replace('Y', 1);
        numero = numero.replace('Z', 2);
        let = dni.substr(dni.length-1, 1);
        numero = numero % 23;
        letra = 'TRWAGMYFPDXBNJZSQVHLCKET';
        letra = letra.substring(numero, numero+1);
        if (letra != let) {
            //alert('Dni erroneo, la letra del NIF no se corresponde');
            return false;
        }else{
            //alert('Dni correcto');
            return true;
        }
    }else{
        //alert('Dni erroneo, formato no válido');
        return false;
    }
    }
    
    
    
     $.validator.addMethod("anyDate",
    function(value, element) {
        return value.match(/^(0?[1-9]|[12][0-9]|3[0-1])[/., -](0?[1-9]|1[0-2])[/., -](19|20)?\d{2}$/);
        },
        "Por favor introduce la fecha en el formato DD/MM/YY o DD/MM/YYYY"
    );
    
         $.validator.addMethod("onlyletter",
    function(value, element) {
        return value.match(/[a-zA-Z]/);
        },
        "Sólo letras disponibles"
    );
    
     $.validator.addMethod("onlyphotos",
    function(value, element) {
        return value.match(/\.(jpg|png)$/i);
        },
        "El formato de archivo es incorrecto"
    );
         $.validator.addMethod("valemail",
    function(value, element) {
        return value.match(/^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$/);
        },
        "El formato del email es incorrecto"
    );
    
 
    
    
    
 
    //when the dom has loaded setup form validation rules
    $(D).ready(function($) {
        JQUERY4U.UTIL.setupFormValidation();
    });