I am posting this as answer, and not as comment to your question because its easier this way. What we did is used TOM.NET API during rendering to extract all meta we need about component templates. You can achieve that by using following filter:
RepositoryItemsFilter filter = new RepositoryItemsFilter(session)
{
ItemTypes = new ItemType[] { ItemType.ComponentTemplate },
Recursive = true
};
Then you can retrieve all templates in publication via following code:
Publication publication = (Publication)engine.GetObject(publicationWebDAV);
XmlElement componentTemplates = publication.GetListItems(filter);
IEnumerable<XElement> componentTemplateXElementList = XDocument.Parse(componentTemplates.OuterXml).Root.Descendants().Where(item => item.Attribute("Type").Value == "32");
foreach (XElement componentTemplateXElement in componentTemplateXElementList)
{
int componentTemplateId = new TcmUri(componentTemplateXElement.Attribute("ID").Value).ItemId;
componentTemplates.TryAdd(componentTemplateId.ToString(), componentTemplateXElement.Attribute("Title").Value);
}
After that you can use session to read component template object, do some additional parsing and generate your xml or json containing all relevant data about your templates.
They will be published to broker with defined template, so on content delivery side you can always query it.
But please make one note:
every time you change something about your templates (either create new one, update current one), you will have to republish this custom template to refresh data on content delivery.