Alright, I've got to be doing something stupid here because my code has been pared to the bare minimum example and its still not working.
Here's the deal:
attr_accessible :username, :retail_profile_attributes
@user = User.new
<%= form_for resource, :as => resource_name, :url => registration_path(resource_name) do |f| %>
<p><%= f.label :username %><br />
<%= f.text_field :username %></p>
<%= f.fields_for :retail_profile do |builder| %>
<p><%= builder.label :company_name %><br />
<%= builder.text_field :company_name %></p>
<% end %>
<p><%= f.submit "Submit" %></p>
<% end %>
So what happens is that the form that renders shows the username field, but fails to show the company_name field. If i put a debug statement in on @user.retail_profile.nil? it always comes back true, so apparently my statement in the registrations_controller -- @user.build_retail_profile -- isnt actually doing anything.
I've seen examples that look just like this all over the place, so I must be doing something remarkably stupid here I just can't figure out what it is.