Of course I post and then realise that I missed a big one... The password format is different between AIX and Linux. I got round this by using jinja2 to convert the format for me...
- name: add accounts for AIX
user: name={{item.name}} append=yes createhome=yes group=group shell={{osshell}} uid={{item.uid}} comment={{item.comment}}
state={{item.state}} update_password=on_create
password={{item.password | replace("$1$", "{smd5}", 1)| replace("$5$", "{ssha256}", 1) | replace("$6$", "{ssha512}", 1) }}
with_items: localuserlist
when: ansible_os_family == "AIX"
I realise that may not be the best way of doing this but it works well. Most of the other differences that I have found so far are things that I can work around by using variables.