Jackson De / Serializando Data-a-String-para-Data em mapas genéricos

Existem muitos exemplos de Jackson para / do código java.util.Date, mas todos eles parecem utilizar a anotação POJO. Eu tenho mapas genéricos de escalares que desejo de / serializar para JSON. Esta é a configuração atual do desserializador; muito simples:

public class JSONUtils {
    static {
        DateFormat df = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS");

        mapper = new ObjectMapper();

        mapper.configure(DeserializationFeature.USE_BIG_DECIMAL_FOR_FLOATS, true);
        mapper.setDateFormat(df);  // this works for outbounds but has no effect on inbounds

        mapper.getDeserializationConfig().with(df); // Gave this a shot but still does not sniff strings for a format that we declare should be treated as java.util.Date                           
  }
  public static Map<String,Object> parseJSON(InputStream is) {
    Map<String,Object> data = null;

    try {
        data = mapper.readValue(is, Map.class);
    } catch(Exception e) {
      // ...
    }

    return data;
}

Eu percebo que um agente de datas pode transformar java.util.Date em uma string ISO 8601-ish. Está indo para o outro lado que me intriga. Claramente, em um documento JSON sem contexto, uma string é uma string, então não posso saber se foi uma data. Então, eu estou preparado para abaixar isso e examinar todas as strings sendo desserializadas e se elas tiverem o mesmo cheiro que as DDs de AAAA-MM-DDTHH: MM: SS.sss, então eu farei um java.util.Date ao invés de apenas retornar uma String. Então, dado:

{ "name": "buzz",
  "theDate": "2013-09-10T12:00:00.000"
}

vai render

Map<String,Object> m = mapper.readValue(is, Map.class);
Object o1 = m.get("name");   // o1 is instanceof String
Object o2 = m.get("theDate");  // o2 is instanceof Date

Mas isso significa que o desserializador deve retornar dois tipos diferentes e não consegui descobrir como fazer isso em Jackson. Alguém sabe de um exemplo bom e compacto que farejará seqüências de datas e as transformará em datas, deixando outras como Strings?

questionAnswers(4)

yourAnswerToTheQuestion