If you have the need to sell services or products via Virtuemart that don't require shipping then you are out of luck with Virtuemart out of the box.  However with a few simple tweaks to the VM codebasee this can be accomodated.

Virtuemart has a very helpful mechanism for creating downloadable products which we can adapt to skip the shipping step of the checkout.

Code Changes

If you edit the file administrator/components/com_virtuemart/classes/ps_product.php and find the method "is_downloadable" (line 945 in Virtuemart 1.15) and replace it with the following code

	function is_downloadable($product_id) {
		// GWE mod start
		if( empty( $GLOBALS['product_info'][$product_id]['skipshipping'] )) {
		    $db_check = new ps_DB;
			$q_ns = 'SELECT p.product_id from #__{vm}_product as p
					LEFT JOIN #__{vm}_product_category_xref as xr on  p.product_id=xr.product_id
					LEFT JOIN #__{vm}_category as ct on  xr.category_id=ct.category_id
					where p.product_id='.intval($product_id).' AND LOWER(ct.category_name) = "no shipping"';

			$db_check->query($q_ns);
			$db_check->next_record();
			if( $db_check->num_rows() > 0 ) {
				$GLOBALS['product_info'][$product_id]['skipshipping'] = 'Y';
			} else {
				$GLOBALS['product_info'][$product_id]['skipshipping'] = 'N';
			}
		}
		// GWE mod end
		if( empty( $GLOBALS['product_info'][$product_id]['is_downloadable'] )) {
		    $db_check = new ps_DB;
	        $q_dl = "SELECT attribute_name,attribute_value 
	        				FROM #__{vm}_product_attribute WHERE
							product_id=".(int)$product_id." AND attribute_name='download'";
			$db_check->query($q_dl);
			$db_check->next_record();
			if( $db_check->num_rows() > 0 ) {
				$GLOBALS['product_info'][$product_id]['is_downloadable'] = 'Y';
			} else {
				$GLOBALS['product_info'][$product_id]['is_downloadable'] = 'N';
			}
		}
		// GWE mod start
		//return $GLOBALS['product_info'][$product_id]['is_downloadable'] == 'Y';
		return ($GLOBALS['product_info'][$product_id]['is_downloadable'] == 'Y' || $GLOBALS['product_info'][$product_id]['skipshipping'] == 'Y');
		// gwe mod end
	}

Creating Non-Shipping Products

If you look at the code above you may notice that there is a test on a product's category name.  Basically any product we create if we add it into a category called "No Shipping" then in combination with the code change above Virtuemart will skip the shipping stage of the checkout process.