Associates parameter documentation with parameters for the executable
        and any remaining docs with the executable itself.

         - key: the module.executable identifier for the function or subroutine.

def process_execdocs(self, docs, anexec, key, add=True):
        """Associates parameter documentation with parameters for the executable
        and any remaining docs with the executable itself.

         - key: the module.executable identifier for the function or subroutine.
        """
        #Paramdocs has a list of docstrings for summary, usage, parameters, etc.
        #check which belong to parameters and associate them, otherwise append
        #them to the executable.
        for doc in docs:
            if doc.doctype == "parameter":
                if doc.pointsto is not None and doc.pointsto in anexec.parameters:
                    if add:
                        anexec.parameters[doc.pointsto].docstring.append(doc)
                    else:
                        anexec.parameters[doc.pointsto].overwrite_docs(doc)
                else: 
                    #the parameter docstring is orphaned, give a warning.
                    wmsg = ("the docstring for parameter '{}' had no corresponding "
                            "parameter in the executable definition for '{}' ({}).")
                    msg.warn(wmsg.format(doc.pointsto, anexec.name, anexec.module.filepath))
            elif doc.doctype == "group":
                if "name" not in doc.attributes:
                    doc.attributes["name"] = "default"
                kids = self._process_docgroup(doc, anexec)
                if add:
                    anexec.docstring.extend(kids)
                else:
                    for kid in kids:
                        anexec.overwrite_docs(kid)
            else:
                #The docstring must be for the executable
                if add:
                    anexec.docstring.append(doc)
                else:
                    anexec.overwrite_docs(doc)