add optional callback to public api and invoke AsyncProxy behind the scenes
update docs