docs: function() {
  	          var errors = [];
  
  	          function addError(attribute, type) {
  		            errors.push([attribute, type]);
  	          }
  
  	          if(! this.fn) { // FN is a required attribute
  		            addError("fn", "required");
  	          }
  
  	          // make sure multivalued properties are *always* in array form
  	          for(var key in VCard.multivaluedKeys) {
  		            if(this[key] && ! (this[key] instanceof Array)) {
                      this[key] = [this[key]];
  		            }
  	          }
  
  	          // make sure compound fields have their type & value set
  	          // (to prevent mistakes such as vcard.addAttribute('email', 'foo@bar.baz')
  	          function validateCompoundWithType(attribute, values) {
  		            for(var i in values) {
  		                var value = values[i];
  		                if(typeof(value) !== 'object') {
  			                  errors.push([attribute + '-' + i, "not-an-object"]);
  		                } else if(! value.type) {
  			                  errors.push([attribute + '-' + i, "missing-type"]);
  		                } else if(! value.value) { // empty values are not allowed.
  			                  errors.push([attribute + '-' + i, "missing-value"]);
  		                }
  		            }
  	          }
  
  	          if(this.email) {
  		            validateCompoundWithType('email', this.email);
  	          }
  
  	          if(this.tel) {
  		            validateCompoundWithType('email', this.tel);
  	          }
  
  	          if(! this.uid) {
  		            this.addAttribute('uid', this.generateUID());
  	          }
  
  	          if(! this.rev) {
  		            this.addAttribute('rev', this.generateRev());
  	          }
  
  	          this.errors = errors;
  
  	          return ! (errors.length > 0);
  	      }