Für Mapnik hatte ich mal folgendes Projekt gefunden, aber bisher nicht ausprobiert:

Source: https://github.com/yvecai/RenderLegend
Beispiel: http://dev-yves.dyndns.org/legend/page.html

So wie ich das sehe, wird aus einer Legenden-Beschreibung in XML je Element ein temporäres OSM XML generiert und gerendert. Vielleicht kannst Du ja was davon verwenden oder zumindest abschauen.