So, the solution was a lot simpler than I had expected. I decided to try returning a dictionary from the function and creating a view as per normal. I was expecting that this wouldn't work. I was pleasantly surprised when the view rendered the html and returned it back to the ajax call.
I think I was confused because all the ajax examples in the web2py book and also the ones my lecturer provided had the functions returning strings (or helper objects). Maybe the use of views with ajax calls is something that can be included in the web2py book? Cheers, Brent