docs: def runner_doc(*args):
      '''
      Return the docstrings for all runners. Optionally, specify a runner or a
      function to narrow the selection.
  
      The strings are aggregated into a single document on the master for easy
      reading.
  
      Multiple runners/functions can be specified.
  
      .. versionadded:: 2014.7.0
  
      CLI Example:
  
      .. code-block:: bash
  
          salt '*' sys.runner_doc
          salt '*' sys.runner_doc cache
          salt '*' sys.runner_doc cache.grains
          salt '*' sys.runner_doc cache.grains mine.get
  
      Runner names can be specified as globs.
  
      .. versionadded:: 2015.5.0
  
      .. code-block:: bash
  
          salt '*' sys.runner_doc 'cache.clear_*'
  
      '''
      run_ = salt.runner.Runner(__opts__)
      docs = {}
      if not args:
          for fun in run_.functions:
              docs[fun] = run_.functions[fun].__doc__
          return _strip_rst(docs)
  
      for module in args:
          _use_fnmatch = False
          if '*' in module:
              target_mod = module
              _use_fnmatch = True
          elif module:
              # allow both "sys" and "sys." to match sys, without also matching
              # sysctl
              target_mod = module + '.' if not module.endswith('.') else module
          else:
              target_mod = ''
          if _use_fnmatch:
              for fun in fnmatch.filter(run_.functions, target_mod):
                  docs[fun] = run_.functions[fun].__doc__
          else:
              for fun in run_.functions:
                  if fun == module or fun.startswith(target_mod):
                      docs[fun] = run_.functions[fun].__doc__
      return _strip_rst(docs)