In the Google AdWords API, I believe Keyword IDs and AdGroup IDs (and obviously Campaign IDs) are unique within an account (as opposed to the Keyword ID only being unique within
This may be a bit late, but here's what I found regarding keyword/criterion IDs. Take it with a grain of salt, but I think it's not too far from reality:
The keyword itself as an object comprising text and match type (or other attributes depending on the type of criterion) has an AdWords-wide unique ID. This means that whenever you use the keyword "supercalifragilisticexpialidocious" with match type "BROAD", it will always have the same ID.
However, only in combination with an ad group ID it is possible to define attributes such as CPC, status, approval status, etc. To continue the above example, if you have that keyword in two different AdWords accounts using different CPCs, the keyword IDs themselves are still identical—the information about CPCs is saved separately from the keyword itself.
This corresponds pretty well to the type hierarchy in the WSDL: The AdGroupCriterionService returns AdGroupCriterion objects which themselves contain Criterion objects. Information about bids, status, etc. is available on the AdGroupCriterion object while the keyword information itself is inside the Criterion object (which may be shared by other AdGroupCriterion objects)
[update] At an Adwords workshop, Google said it was "most likely" that new keywords with the same text and match type as an existing one would use the same criterion ID, but it's not guaranteed. See @eshwar's answer for an example where same keywords have different IDs.