NAT is used to translate network addresses, either source, destination, or both. IP and NAT do not know anything about public or private addresses, which were arbitrarily assigned. There is nothing inherent in IP that defines public or private addresses. Simply put, the ISPs have agreed to not forward traffic based on some address ranges, but it has nothing to do with IP or NAT. It is entirely possible to use NAT to translate Private-to-Private, Private-to-Public, Public-to-Private, or Public-to-Public addresses.
Having said that, NAT should be avoided if at all possible. Since private addressing cannot be used on the public Internet, that would be a scenario where you would want to use NAT. It is entirely possible that someone will use NAT to translate any of the other scenarios, but there should be a good reason to do it because NAT breaks the end-to-end IP paradigm.