Is there a limited spread of costs that are actually used? For example, only 100, 200, 300, 400 and 500?
If that's the case, I'd create 5 identity tags for these abilities - <identity group="AdvCst100"/>, etc.
Then, the classes can be assigned a tag for each ability they grant, at the cost they grant it at, and each class pushes all their AdvCst### tags to the hero.
Then, the advancements search for their own identity tags on the hero - looking in order from cheapest to most expensive, so that if there's more than one option available for that ability, the cheapest one is the one used for that cost:
Code:
if (hero.isidentity[AdvCst100] <> 0) then
cost = 100
elseif (hero.isidentity[AdvCst200] <> 0) then
cost = 200
etc.