code: public static String adaptToCustomPropertyName(final String propertyName) {
          if (propertyName == null || "".equals(propertyName)) {
              throw new IllegalArgumentException("propertyName cannot be null");
          }
          String customName = propertyName.toLowerCase();
          customName = CUSTOM_REGEX.matcher(customName).replaceAll(UNDERSCORE);
          if (!customName.startsWith(CUSTOM_PREFIX)) {
              customName = CUSTOM_PREFIX + customName;
          }
          return customName;
      }
docs: A simple utility method which implements the specified semantics of
  custom properties.
  <p>
  i.e. The parameter names are mapped to lower case and any character that
  is neither a number nor letter in a parameter name is replaced with an
  "underscore".
  <p>
  e.g. Review:Chapter=1.2.56 would map to custom_review_chapter=1.2.56.
  
  @param propertyName
  @return