diff --git a/lib/waterline/utils/query/private/normalize-new-record.js b/lib/waterline/utils/query/private/normalize-new-record.js
index <HASH>..<HASH> 100644
--- a/lib/waterline/utils/query/private/normalize-new-record.js
+++ b/lib/waterline/utils/query/private/normalize-new-record.js
@@ -200,8 +200,14 @@ module.exports = function normalizeNewRecord(newRecord, modelIdentity, orm, ensu
     // If this attribute is optional...
     if (!attrDef.required) {
 
+      // Ignore this check for the primary key attribute, because if it's optional,
+      // then we know we're already done (if a value was explicitly specified for it,
+      // it will have already been validated above)
+      if (attrName === WLModel.primaryKey) {
+        // Do nothing.
+      }
       // Default singular associations to `null`.
-      if (attrDef.model) {
+      else if (attrDef.model) {
         assert(_.isUndefined(attrDef.defaultsTo), '`defaultsTo` should never be defined for an association.  But `'+attrName+'` declares just such an inappropriate `defaultsTo`: '+util.inspect(attrDef.defaultsTo, {depth:null})+'');
         newRecord[attrName] = null;
       }
Don't set primary key to null when it is not required.