Just looked it up, there is indeed a cap however it appears to be at 60% Reduction.
Found in \lua\sim\BuffAffects.lua:
function Cooldown( unit, buffName )
local val = BuffCalculate(unit, buffName, 'Cooldown', 1)
if val < 0.4 then
val = 0.4
end
unit.Sync.CooldownMod = val
end
While immediately it may seem like a 40% Cap. The variable 'val' is calculated by 1 * (1 + Multiples), so a 60% reduction is {Mult = -0.60}, so 1 * (1 + -0.6) = 1 * (0.4) = 0.4, anything higher will be less than 0.4, and be capped at 0.4.
All percentage gains in this game are added rather than done sequentially, so -15%, -15% and -20% should be -50%. Also from what I can tell this should be above the cap, though it is late so my math might be backwards and it is 40%. Either way, if the tooltip says it should be 7 and it's 9, that is a bug regardless. Either the cooldown should be 7 or the tooltip should say 9, it's a bug either way.
From what I can tell this Cooldown function which applies this cap is performed on the actual Cooldown calulations, but is not performed on the calulation done to display the cooldown in the tooltip. This would insinuate that the tooltip is wrong and that whatever cooldown comes up is correct. I cannot however determine why your results seem to show a cap at 40% while the cap should be at 60%, I'm going to assume it is my horrible math, I should have a look at it in the morning.
If this is true then the cap should be at a 60% reduction and since the max attainable in-game is currently 50% it should work.
But as of now the tooltips are a bit off depending on how you round the numbers, if you either round them up or down (and ring of fire is way off) and the cooldowns themselves are waaay of for all of them.
And i do agree as to the way it stacks as all other bonuses stacks in the same way, why shoulden't the cooldowns to that?
Taken from the demigod.wikia.com site:
Bonus Calculation
There are various bonuses (health, speed, regen, etc) from a variety of sources (items, abilities, auras, etc) and they can be absolute (i.e. +18) or relative (i.e. +70%). The calculation for all these bonuses is the same:
( Base + Absolute Bonus 1 + Absolute Bonus 2 + etc ) * ( 1 + Relative bonus 1 + Relative bonus 2 + etc )
Decimalize Relative Bonuses: 70% becomes 0.7
An extensive example:
Leads to ( 8 + 18 + 1.92 ) * ( 1 + 0.7 + 1.5 ) = 89.344 Mana per Second.
According to this formula the Ring Of Fire would look like this:
Base cast 10 sec
no set reduction
15,15,20 in % reduction
would give
(1)*(1+15+15+20) = 50% reduction as there are no items thats give a set cooldown reduction (like a 2 sec reduction)