Most engines that support skeletal animation have some concept of keyframe events. Essentially, a keyframe can have arbitrary metadata associated with it that is inspected by the code that is driving the animation in the engine. This data is then used to perform actions at the appropriate times when the animation is rendered.
As a simple contrived example: An artist might create a walk cycle animation and on each keyframe where the walking character's foot touches the floor, the keyframes are annotated with a FootStepEvent string. When the walk cycle is rendered in the receiving engine, the engine sees the FootStepEvent string on a given keyframe and knows that it should play a footstep sound each time that particular frame is reached.
The engine I'm developing has support for this, and I have written various addons to get animation and bone data out of Blender. Specifically, for each action, I'm recording all of the action's FCurves and taking a snapshot of the skeleton at each keyframe along with data such as the curve's easing and interpolation settings.
The problem: How do I actually author per-keyframe metadata in Blender? What I would like to be able to do is associate simple strings with particular keyframes inside actions. I can't see anything in Blender's data model that would allow me to do this.