It sounds like what you actually want is a munge block, which is used to change the value of the parameter.
munge do |value|
if resource[:otherparam] then
#dosomething
else
0
end
end
validate should be used only to raise an exception if the value is invalid. Puppet will call validate and then munge. Also, parameters are set in the order they're defined in the type/<type>.rb file, and validated/munged before moving on to the next parameter. So a parameter can only depend on the values of parameters that come *before* it.
Thanks!