Basically UAT can be done User (Customer Team), UAT Test Cases will be designed by User, if they don't know how to make their requirements in to Test cases then Independent Testing Team will support User to design Test cases for UAT.
These Test cases are not similar to other Test Cases (Functional/System etc), why bcoz its purely linked with User performance on the product in the live environment and their best practices in the Product, and its depends on the domain. some times UAT can be done like a layman.
UAT Test Cases can be provided/designed/explained by Customer/User, due to few problems like lack of knowledge on preparation of Test cases/Testing, No time, etc Independent Testing can assist the User/Customer to generate UAT Test cases.
Although UAT test cases are meant to be written by the Customer/User But if you are working for a Services Company or 3rd Party testing company then most of the time you will have to write the test cases and get the approval from the customer and also run them at Client/Customer place most of the user education also practically happens here if the Customer/User happens to be a Non-IT company.
On the other hand for complex systems and if the customer happens to be IT background and all the more from countries like JAPAN, then the USER are keen to every detail and writes UAT cases themselves and ensure each of them pass at their end on their machines.