6 years later, and this is now a feature of blender 2.81.
From the docs:
With an operator defined as (irrelevant parts omitted):
class WM_OT_tooltip_test(bpy.types.Operator):
arg: bpy.props.StringProperty()
@classmethod
def description(cls, context, properties):
return "Arg is: " + properties.arg
The following button would have a tooltip that says “Arg is: FOO”.
layout.operator('wm.tooltip_test').arg = 'FOO'
This is mainly intended for cases when multiple similar but distinct operations are implemented for technical reasons as one operator with a mode switch parameter.