diff --git a/release-notes/CREDITS b/release-notes/CREDITS
index 6948c19..2abe00a 100644
--- a/release-notes/CREDITS
+++ b/release-notes/CREDITS
@@ -855,6 +855,11 @@
     of EnumMap, regular  Map, or contents of EnumSet
    [1.9.4]
 
+Nathaniel Bauernfeind:
+  * Reported [JACKSON-774]: PropertyBasedCreator not using JsonDeserializer.getNullValue()
+   [1.9.5]
+
 Ittai Zeidman:
   * Reported [JACKSON-775]: MissingNode.asText() should return "", not null
    [1.9.5]
+   
\ No newline at end of file
diff --git a/release-notes/VERSION b/release-notes/VERSION
index b5eb9c8..7720980 100644
--- a/release-notes/VERSION
+++ b/release-notes/VERSION
@@ -11,6 +11,8 @@
   * [JACKSON-757]: further fixing (1.9.4 had partial fix)
   * [JACKSON-773]: Bug in SimpleFilterProvider constructor
    (reported by Kenny M)
+  * [JACKSON-774]: PropertyBasedCreator was not using JsonDeserializer.getNullValue()
+   (reported by Nathaniel B)
   * [JACKSON-775]: MissingNode.asText() should return "", not null
    (reported by Ittai Z)
 
diff --git a/src/mapper/java/org/codehaus/jackson/map/deser/impl/PropertyBasedCreator.java b/src/mapper/java/org/codehaus/jackson/map/deser/impl/PropertyBasedCreator.java
index 8da1777..fbf59cb 100644
--- a/src/mapper/java/org/codehaus/jackson/map/deser/impl/PropertyBasedCreator.java
+++ b/src/mapper/java/org/codehaus/jackson/map/deser/impl/PropertyBasedCreator.java
@@ -34,7 +34,7 @@
      * If some property values must always have a non-null value (like
      * primitive types do), this array contains such default values.
      */
-    protected final Object[]  _defaultValues;
+    protected Object[]  _defaultValues;
 
     /**
      * Array that contains properties that expect value to inject, if any;
@@ -84,6 +84,13 @@
     public void assignDeserializer(SettableBeanProperty prop, JsonDeserializer<Object> deser) {
         prop = prop.withValueDeserializer(deser);
         _properties.put(prop.getName(), prop);
+        Object nullValue = deser.getNullValue();
+        if (nullValue != null) {
+            if (_defaultValues == null) {
+                _defaultValues = new Object[_properties.size()];
+            }
+            _defaultValues[prop.getPropertyIndex()] = nullValue;
+        }
     }
     
     /**
diff --git a/src/test/org/codehaus/jackson/map/deser/TestCreatorNullValue.java b/src/test/org/codehaus/jackson/map/deser/TestCreatorNullValue.java
new file mode 100644
index 0000000..8239e41
--- /dev/null
+++ b/src/test/org/codehaus/jackson/map/deser/TestCreatorNullValue.java
@@ -0,0 +1,82 @@
+package org.codehaus.jackson.map.deser;
+
+import org.codehaus.jackson.*;
+import org.codehaus.jackson.annotate.*;
+import org.codehaus.jackson.map.*;
+import org.codehaus.jackson.type.JavaType;
+
+// for [JACKSON-774]
+@SuppressWarnings("rawtypes")
+public class TestCreatorNullValue extends BaseMapTest
+{
+    private static class Container {
+        Contained<String> contained;
+
+        @SuppressWarnings("unused")
+        @JsonCreator
+        public Container(@JsonProperty("contained") Contained<String> contained) {
+            this.contained = contained;
+        }
+    }
+
+    private static interface Contained<T> {}
+
+    private static class NullContained implements Contained<Object> {}
+
+    private static final NullContained NULL_CONTAINED = new NullContained();
+
+    private static class ContainedDeserializer extends JsonDeserializer<Contained> {
+        @Override
+        public Contained deserialize(JsonParser jp, DeserializationContext ctxt) throws JsonProcessingException {
+            return null;
+        }
+
+        @Override
+        public Contained getNullValue() {
+            return NULL_CONTAINED;
+        }
+    }
+
+    private static class ContainerDeserializerResolver extends Deserializers.Base {
+        @Override
+        public JsonDeserializer<?> findBeanDeserializer(JavaType type,
+                DeserializationConfig config, DeserializerProvider provider, BeanDescription beanDesc, BeanProperty property)
+                throws JsonMappingException {
+            if (!Contained.class.isAssignableFrom(type.getRawClass())) {
+                return null;
+            } else {
+                return new ContainedDeserializer();
+            }
+        }
+    }
+
+    private static class TestModule extends Module {
+        @Override
+        public String getModuleName() {
+            return "ContainedModule";
+        }
+
+        @Override
+        public Version version() {
+            return Version.unknownVersion();
+        }
+
+        @Override
+        public void setupModule(SetupContext setupContext) {
+            setupContext.addDeserializers(new ContainerDeserializerResolver());
+        }
+    }
+
+    /*
+    /**********************************************************
+    /* Unit tests
+    /**********************************************************
+     */
+    
+    public void testUsesDeserializersNullValue() throws Exception {
+        ObjectMapper mapper = new ObjectMapper();
+        mapper.registerModule(new TestModule());
+        Container container = mapper.readValue("{}", Container.class);
+        assertEquals(NULL_CONTAINED, container.contained);
+    }
+}
\ No newline at end of file
