This issue is slightly outdated, but I thought I'd join and add a response in case someone else comes around trying to do this, since I just had to deal with this.
The issue with the HOWTO you referenced is two-fold. First, it makes no correlation between devise and your app. You have to override the Devise Registrations controller, or you essentially are building your own auth system.
So the first thing to recognize is the method and controller that is being called which prevents you from updating your profile without a password. This is Devise::RegistrationsController#update. Now that we have that, we can do a step-by-step on getting to the end result.
1. generate a new controller. Call it whatever you want, I prefer to stick with registrations
rails generate controller registrations
2. in your config/routes.rb file, point the users route to call the registrations controller for all things registration.
devise_for :users, :controllers => {:registrations => 'registrations'} #the right assignment is whatever you called your ###controller
3. call rake routes. You should see all the routes to the registration controller, and all the old devise registration routes will not appear: The routes should look like:
cancel_user_registration GET /users/cancel(.:format) registrations#cancel
user_registration POST /users(.:format) registrations#create
new_user_registration GET /users/sign_up(.:format) registrations#new
edit_user_registration GET /users/edit(.:format) registrations#edit
PUT /users(.:format) registrations#update
DELETE /users(.:format) registrations#destroy
4. open your registrations_controller.rb file. This is a really two steps:
a. Change the inheritance from ApplicationsController to Devise::RegistrationsController
b. For each method listed above in step 3 (registrations#method_name) with the exception of 'update', create a method and just call super:
class RegistrationsController < Devise::RegistrationsController
def new
super
end
def create
super
end
def edit
super
end
def cancel
super
end
def destroy
super
end
end
5. Now that you have every method working just like it was except for update, all that's left to do is use the code from the how-to(https://github.com/plataformatec/devise/wiki/How-To:-Allow-users-to-edit-their-account-without-providing-a-password) in the registrations_controller.rb file, inside a method called 'update'. Also, be sure to add the helpers from the how-to. You can put them in a specific registrations_helper.rb file (or whatever you called your controller), or in your application_helper.rb file. The one 'gotcha' in the example is it is looking to evaluate params[:user][:email].empty? and params[:user][:password].empty?. I imagine many profile update pages will not necessarily consist of these fields, so this will throw a "nomethoderror on nil::nil class" error. It's simply because those parameters don't exist if they're not in your form. There are many ways of dealing with that, but just be aware of that simple oversight.
Hope this helps someone.
-Hassan