JSON schema validator
I'd definitely change:

if(instance[i] == undefined) {
    addError("Property Not found", i);
}


to something more robust, e.g.

if (!instance.hasOwnProperty(i)) {
    addError("Property Not found", i);
}


Stylistically I'd change a few things as well:

Add a space between function names and (): function() to function ()
Add a space between if, for etc and (: for(i in schema) to for (i in schema)
Add in semi-colons after defining your functions:

var getType = function(attr) {
    return Object.prototype.toString.call(attr);
}; // &lt;-- here.


Also, because JavaScript doesn't have block scope I like to define all my variables at the top of the function. e.g. you have:

validate = function (schema, instance) {

    // omitted code.

    for(var j=0; j&lt;instance[i].length; j++) {
        errors += validate(zeroSchema, instance[i][j]); 
    }

    // more code.
}


Whereas I would prefer j defined at the top of the function (as well as the extra spaces I've added).

Having said all of that, I wonder whether your solution is flexible enough - how would you specify an optional property? A property with a minimum and/or maximum value?