This generally sounds good. I would say introduce the default_range_min parameter to the observation source's namespace (i.e. /move_base/global_costmap/obstacles/base_scan/default_range_min) and have it default to 0. Then each observation would have a min_raytrace_range in addition to obstacle_range and raytrace_range. Then that value could be used in the origin changing code below. Does that sound right?