code: def document_stat(stat):
      
      # Dedented so that it lineups (in sphinx) with the part
      # generated parts when put together
      docstring = dedent(stat.__doc__)
  
      # usage:
      signature = make_signature(stat.__name__,
                                 stat.DEFAULT_PARAMS,
                                 common_stat_params,
                                 common_stat_param_values)
      usage = STAT_SIGNATURE_TPL.format(signature=signature)
  
      # aesthetics
      contents = OrderedDict(('**{}**'.format(ae), '')
                             for ae in sorted(stat.REQUIRED_AES))
      contents.update(sorted(stat.DEFAULT_AES.items()))
      table = dict_to_table(('Aesthetic', 'Default value'), contents)
      aesthetics_table = AESTHETICS_TABLE_TPL.format(table=table)
      tpl = dedent(stat._aesthetics_doc.lstrip('\n'))
      aesthetics_doc = tpl.format(aesthetics_table=aesthetics_table)
      aesthetics_doc = indent(aesthetics_doc, ' '*4)
  
      # common_parameters
      d = stat.DEFAULT_PARAMS
      common_parameters = STAT_PARAMS_TPL.format(
              default_geom=d['geom'],
              default_position=d['position'],
              default_na_rm=d['na_rm'],
              _aesthetics_doc=aesthetics_doc,
              **common_params_doc)
  
      docstring = docstring.replace('{usage}', usage)
      docstring = docstring.replace('{common_parameters}',
                                    common_parameters)
      stat.__doc__ = docstring
      return stat
docs: Create a structured documentation for the stat
  
      It replaces `{usage}`, `{common_parameters}` and
      `{aesthetics}` with generated documentation.