code: private Map<String, Object> normalizeMap(Map<String, Object> doc) {
  
      	final Map<String, Object> result = new LinkedHashMap<String, Object>();
  
      	for (String key : doc.keySet()) {
      		Object value = doc.get(key);
  
      		if (value == null) {
      			result.put(key, nullLiteral);
      		} else if (value instanceof Boolean) {
      			result.put(key, ((Boolean) value).toString());
      		} else if (value instanceof List<?>) {
      			result.put(key, normalizeList((List<Object>) value));
      		} else if (value instanceof Map<?, ?>) {
      			result.put(key, normalizeMap((Map<String, Object>) value));
      		} else {
      			result.put(key, value);
      		}
      	}
  
      	return result;
      }
docs: Normalizes document as LRSignature Python module does
  - nulls converted to string literal "null"
  - booleans converted to string literals "true" or "false"
  - numeric values in lists are dropped
  - nested maps/JSON documents are normalized
  @param doc Document to normalize