The purists don't like it but that doesn't make it un-viable. Said purists also like to claim that NAT is not a security feature, I disagree with this, having different addresses on your internal and external networks makes it much less likely you will end up with things wide open by accident. It also makes it harder for attackers to gather internal network addresses to target if they can somehow get a machine on the inside to do their bidding.
Of course there are security downsides to NAT as well, for example it may make it harder to locate the real source of traffic when an abuse report comes in.
In terms of actually implementing NAT66, you can't use link-local addresses, since traffic with a link-local source or destination is not allowed to pass over a router.
You can use unique-local or site-local addresses, however on many systems this will result in a de-prioritisation of ipv6 compared to ipv4 because the system will assume if it doesn't have a global address it probably does not have a connection to the IPv6 internet. You can also use NAT to translate from one global address to another.