I'm not sure to be honest. If you return {{broker}} instead of {{broker.firstname}} what properties do you get?
It may be that you have to make sure anything you want to display is available in searchable properties in the schema. It looks like you can have one property in multiple property types, e.g. from one of the samples on that documentation page:
Hi @SStrachan, you say contact.last_show_broker contains the id so I'm assuming it's a dictionary with id and some other properties i.e. you would chain the id property (probably just called "id" but check that) to the end: contact.last_show_broker.id
So, you just need to do
{% set broker = crm_object("affiliate", contact.last_show_broker.id) %}
{{ broker.firstname }}