One more fix, so that "default object typing" seems to work for basic Object.class type.

diff --git a/src/mapper/java/org/codehaus/jackson/map/ObjectMapper.java b/src/mapper/java/org/codehaus/jackson/map/ObjectMapper.java
index fb9e696..89e616e 100644
--- a/src/mapper/java/org/codehaus/jackson/map/ObjectMapper.java
+++ b/src/mapper/java/org/codehaus/jackson/map/ObjectMapper.java
@@ -623,7 +623,7 @@
     public <T> T readValue(JsonParser jp, Class<T> valueType)
         throws IOException, JsonParseException, JsonMappingException
     {
-        return (T) _readValue(jp, TypeFactory.type(valueType), copyDeserializationConfig());
+        return (T) _readValue(copyDeserializationConfig(), jp, TypeFactory.type(valueType));
     } 
 
     /**
@@ -648,7 +648,7 @@
                            DeserializationConfig cfg)
         throws IOException, JsonParseException, JsonMappingException
     {
-        return (T) _readValue(jp, TypeFactory.type(valueType), cfg);
+        return (T) _readValue(cfg, jp, TypeFactory.type(valueType));
     } 
 
     /**
@@ -663,8 +663,7 @@
     public <T> T readValue(JsonParser jp, TypeReference<?> valueTypeRef)
         throws IOException, JsonParseException, JsonMappingException
     {
-        return (T) _readValue(jp, TypeFactory.type(valueTypeRef),
-                              copyDeserializationConfig());
+        return (T) _readValue(copyDeserializationConfig(), jp, TypeFactory.type(valueTypeRef));
     } 
 
     /**
@@ -687,7 +686,7 @@
                            DeserializationConfig cfg)
         throws IOException, JsonParseException, JsonMappingException
     {
-        return (T) _readValue(jp, TypeFactory.type(valueTypeRef), cfg);
+        return (T) _readValue(cfg, jp, TypeFactory.type(valueTypeRef));
     } 
 
     /**
@@ -701,7 +700,7 @@
     public <T> T readValue(JsonParser jp, JavaType valueType)
         throws IOException, JsonParseException, JsonMappingException
     {
-        return (T) _readValue(jp, valueType, copyDeserializationConfig());
+        return (T) _readValue(copyDeserializationConfig(), jp, valueType);
     } 
 
     /**
@@ -723,7 +722,7 @@
                            DeserializationConfig cfg)
         throws IOException, JsonParseException, JsonMappingException
     {
-        return (T) _readValue(jp, valueType, cfg);
+        return (T) _readValue(cfg, jp, valueType);
     } 
 
     /**
@@ -762,7 +761,7 @@
          *   will map Json null straight into Java null. But what
          *   we want to return is the "null node" instead.
          */
-        JsonNode n = (JsonNode) _readValue(jp, JSON_NODE_TYPE, cfg);
+        JsonNode n = (JsonNode) _readValue(cfg, jp, JSON_NODE_TYPE);
         return (n == null) ? NullNode.instance : n;
     }
 
@@ -1394,8 +1393,7 @@
     /**
      * Actual implementation of value reading+binding operation.
      */
-    protected Object _readValue(JsonParser jp, JavaType valueType,
-                                DeserializationConfig cfg)
+    protected Object _readValue(DeserializationConfig cfg, JsonParser jp, JavaType valueType)
         throws IOException, JsonParseException, JsonMappingException
     {
         /* First: may need to read the next token, to initialize
@@ -1411,7 +1409,7 @@
         } else { // pointing to event other than null
             DeserializationContext ctxt = _createDeserializationContext(jp, cfg);
             // ok, let's get the value
-            result = _findRootDeserializer(valueType).deserialize(jp, ctxt);
+            result = _findRootDeserializer(cfg, valueType).deserialize(jp, ctxt);
         }
         // Need to consume the token too
         jp.clearCurrentToken();
@@ -1429,8 +1427,9 @@
                 || t == JsonToken.END_OBJECT) {
                 result = null;
             } else {
-                DeserializationContext ctxt = _createDeserializationContext(jp, copyDeserializationConfig());
-                result = _findRootDeserializer(valueType).deserialize(jp, ctxt);
+                DeserializationConfig cfg = copyDeserializationConfig();
+                DeserializationContext ctxt = _createDeserializationContext(jp, cfg);
+                result = _findRootDeserializer(cfg, valueType).deserialize(jp, ctxt);
             }
             // Need to consume the token too
             jp.clearCurrentToken();
@@ -1487,7 +1486,7 @@
     /**
      * Method called to locate deserializer for the passed root-level value.
      */
-    protected JsonDeserializer<Object> _findRootDeserializer(JavaType valueType)
+    protected JsonDeserializer<Object> _findRootDeserializer(DeserializationConfig cfg, JavaType valueType)
         throws JsonMappingException
     {
         // First: have we already seen it?
@@ -1497,7 +1496,7 @@
         }
 
         // Nope: need to ask provider to resolve it
-        deser = _deserializerProvider.findTypedValueDeserializer(_deserializationConfig, valueType);
+        deser = _deserializerProvider.findTypedValueDeserializer(cfg, valueType);
         if (deser == null) { // can this happen?
             throw new JsonMappingException("Can not find a deserializer for type "+valueType);
         }
diff --git a/src/test/org/codehaus/jackson/map/jsontype/TestDefaultForObject.java b/src/test/org/codehaus/jackson/map/jsontype/TestDefaultForObject.java
new file mode 100644
index 0000000..d4bf324
--- /dev/null
+++ b/src/test/org/codehaus/jackson/map/jsontype/TestDefaultForObject.java
@@ -0,0 +1,71 @@
+package org.codehaus.jackson.map.jsontype;
+
+import java.util.*;
+
+import org.codehaus.jackson.map.*;
+
+public class TestDefaultForObject
+    extends BaseMapTest
+{
+    /*
+     ****************************************************** 
+     * Helper types
+     ****************************************************** 
+     */
+
+    static class StringBean { // ha, punny!
+        public String name;
+
+        public StringBean() { this(null); }
+        protected StringBean(String n)  { name = n; }
+    }
+
+    /*
+     ****************************************************** 
+     * Unit tests
+     ****************************************************** 
+     */
+    
+    public void testBeanAsObject() throws Exception
+    {
+        ObjectMapper m = new ObjectMapper();
+        m.enableDefaultTyping();
+        // note: need to wrap, to get declared as Object
+        String str = m.writeValueAsString(new Object[] { new StringBean("abc") });
+
+        verifySerializationAsMap(str);
+        
+        // Ok: serialization seems to work as expected. Now deserialize:
+        //System.err.println("DEBUG: json = "+str);
+        
+        Object ob = m.readValue(str, Object[].class);
+        assertNotNull(ob);
+        Object[] result = (Object[]) ob;
+        assertNotNull(result[0]);
+        assertEquals(StringBean.class, result[0].getClass());
+        assertEquals("abc", ((StringBean) result[0]).name);
+    }
+
+    @SuppressWarnings("unchecked")
+    private void verifySerializationAsMap(String str) throws Exception
+    {
+        // First: validate that structure looks correct (as Map etc)
+        // note: should look something like:
+        // "[["org.codehaus.jackson.map.jsontype.TestDefaultForObject$StringBean",{"name":"abc"}]]")
+
+        // note: must have default mapper, default typer NOT enabled (to get 'plain' map)
+        ObjectMapper m = new ObjectMapper();
+        List<Object> list = m.readValue(str, List.class);
+        assertEquals(1, list.size()); // no type for main List, just single entry
+        Object entryOb = list.get(0);
+        assertTrue(entryOb instanceof List<?>);
+        // but then type wrapper for bean
+        List<?> entryList = (List<?>)entryOb;
+        assertEquals(2, entryList.size());
+        assertEquals(StringBean.class.getName(), entryList.get(0));
+        assertTrue(entryList.get(1) instanceof Map);
+        Map map = (Map) entryList.get(1);
+        assertEquals(1, map.size());
+        assertEquals("abc", map.get("name"));
+    }
+}