anchor.diff:              }
             }
   }
  -```
  -As you can see the file has two main levels:
  -
  -* Schema type: `PLAIN`, `DERIVED`, `VIRTUAL`.
  -* Attributes: list of attributes (by schema type) to be shown in the form.
  -
  +----
  +====
  +
  +The `customForm.json` file has two main levels:
  +
  +. Schema type, e.g. `PLAIN`, `DERIVED`, `VIRTUAL`;
  +. Attributes: list of attributes (by schema type) to be shown on the form.
  +
  +[discrete]
   ====== Schema type
   
  -The schema type level allows to define customization of the three sub-forms available in the wizard.
  -An user can specify one or each of the three sections in order to customize only what is really needed.
  -Though enable/disable of schema forms can be configured also from the `app.js` file of the enduser, form customization
  -json provides an attribute `show` to hide/show attributes input fields.
  -If `show` is set to `false` info contained into `attributes` will be ignored and nothing is displayed in the form section.
  -
  +The schema type level allows to define customization of the three sub-forms available in the Enduser Application's form.
  +
  +Only one, two or all three sections can be specified, in order to customize only what is really needed.
  +
  +Moreover, a global boolean field `show` is available, to indicate that the whole sub-form should be shown or hidden.
  +When not specified, `show` is treated as `true`.
  +
  +[discrete]
   ====== Attributes
   
  -Attributes level contains a map of attributes to show.
  +The attributes level contains a map of attributes to show.
  +
  +Each attribute has:
  +
  +* a name, e.g. the name of the <<schema,Schema>> from which the attribute is generated
  +* a body, that specifies if the attribute should be readonly, and possibly its default values
  +
  +.Form attribute specification
  +====
  +[source,json]
  +----
  +              "firstname": {
  +                "readonly": true,
  +                "defaultValues": ["defaultFirstname1", "defaultFirstname2"]
  +              },
  +----
  +Here, `firstname` is readonly and has two default values `defaultFirstname1` and `defaultFirstname2`.
  +====
   
   [TIP]
   ====
  -Attributes map is meant to be populated, i.e. empty `attributes` field means "do not filter at all and show all attributes".
  -For example:
  +An empty `attributes` field translates to skip filtering and show all attributes; for example:
  +
   ```
   {
     "PLAIN": 
  
positive.code:           {
              "show": false
            },
    "VIRTUAL": 
            {
              "show": true,
              "attributes": {
  
negative.code: and modify the JSON files under the new directory
  ====
  
  [[customization-enduser-form]]
  ===== Form customization
  
  The <<enduser-application>> allows to customize the form in order to:
  
  * hide / show attributes
  * set attributes read-only for users
  * provide default value(s)
  
  Under the `enduser/src/main/resources` directory, the `customForm.json` file is available, allowing to configure form
  customization.
  
  [NOTE]
  .Hot deploy
  ====
  The `customForm.json` could be edited and reloaded without the need of re-starting the Java EE container.
  ====
  
  [TIP]
  The `customForm.json` default content is just an empty object `{}`: if such file is missing, empty or not valid,
  form customization will be simply disabled and all attributes will be shown.
  
  .Sample form customization
  ====
  [source,json]
  ----
  {
    "PLAIN":
            {
              "show": true,
              "attributes": {
  