def METHOD_NAME(op):
    """Builds a comprehensive docstring for an Operation.
    :param op: :class:`bravado_core.operation.Operation`
    :rtype: str or unicode
    Example: ::
        client.pet.findPetsByStatus?
    Outputs: ::
        [GET] Finds Pets by status
        Multiple status values can be provided with comma seperated strings
        :param status: Statuses to be considered for filter
        :type status: str
        :param from_date: Start date filter
        :type from_date: str
        :rtype: list
    """
    # TODO: remove once lazy docstrings implemented
    log.debug('creating op docstring for %s', op.operation_id)
    s = ''
    op_spec = op.op_spec
    is_deprecated = op_spec.get('deprecated', False)
    if is_deprecated:
        s += '** DEPRECATED **\n'
    summary = op_spec.get('summary')
    if summary:
        s += u'[{0}] {1}\n\n'.format(op.http_method.upper(), summary)
    desc = op_spec.get('description')
    if desc:
        s += u'{0}\n\n'.format(desc)
    # TODO: add shared parameters
    for param_spec in op_spec.get('parameters', []):
        s += create_param_docstring(param_spec)
    # TODO: add 'examples' if available
    # TODO: good idea to identify the default response?
    responses = op_spec.get('responses')
    for http_status_code, response_spec in iter(sorted(iteritems(responses))):
        response_desc = response_spec.get('description')
        s += u':returns: {0}: {1}\n'.format(http_status_code, response_desc)
        schema_spec = response_spec.get('schema')
        if schema_spec:
            s += u':rtype: {0}\n'.format(formatted_type(schema_spec))
    return s