title: Mongoose pre.save() async middleware not working as expected
body: <p>Following up from : <a href="https://stackoverflow.com/questions/13580589/mongoose-unique-validation-error-type/13581906#13581906">Mongoose unique validation error type</a></p>
  
  <p>I'm using this schema with <code>mongoose 3.0.3</code> from npm:</p>
  
  <pre><code>var schema = new Schema({
  
      _id: Schema.ObjectId,
      email: {type: String, required: true, unique: true}
  
  });
  </code></pre>
  
  <p>With this middleware to get a validationError from unique:true </p>
  
  <pre><code>schema.pre("save", function(next, done) {
      var self = this;
  
      model.findOne({email : this.email}, 'email', function(err, results) {
          if(err) {
              done(err);
          } else if(results) {
              console.warn('results', results);
              self.invalidate("email", "email must be unique");
              done(new Error("email must be unique"));
          } else {
              done();
          }
      });
  
      next();
  });
  </code></pre>
  
  <p>However, it does not work!</p>
  
  <p><code>Users.create()</code> will still return a a <code>MongoError: E11000 duplicate key error index</code> and the <code>console.warn()</code> is only called after that.</p>
  
  <p>The save action should not be called until all middleware <code>done()</code>have been called according to the docs, and I should get back a validation error.</p>
  
  <p>It looks like the <code>done()</code> behavior is not working as expected,</p>
  
  <p>Any idea why?</p>