It's very important to note here that 0^0=1 is a shorthand and not a truth . Mathematicians are absolutely not stating that they have proven, or that it is true, that 0^0=1. It is a definition, not a claim of equality. They're not saying "0^0 is 1" in the sense that they say "1+1 is 2" or "0.999... is 1". They're saying "we define 0^0 to be 1". The difference is more than just pedantry, it strikes at the core of why…
This is not true. A very natural way to define a^b is as the number of functions for a set with "b" elements to a set with "a" elements. In this case there is exactly one function from the empty set to the empty set, and we have proven 0^0 = 1. This is no different than defining addition and then proving 1+1 = 2.
EDIT: I realize that you are right. The Cartesian product of the empty set with itself is empty, but it does have a subset, namely the empty set, which happens to be a function.
I'm not so sure this settles anything though. There is exactly one function 0 -> a for every non-empty set a and there is no function b -> 0 for any non-empty set b. Now you have to decide how to define a function to treat the case 0 -> 0. I'm no expert in set theory, but I would think this can be defined to be either without getting into any kind of trouble.