Return entries where field is "not empty"
1. "Expected name or number" error

The parser is expecting a method/property after the dot of productSale, but you are passing arguments. Removing the dot to make it valid:

{% set products = craft.entries.section('product').productSale(':notempty:') %}


.

2. Documentation

There is no documentation on this yet, but it is listed in the release notes:


  Added support for passing “:empty:” and “:notempty:” to
  ElementCriteriaModel parameters when you’re looking for
  empty/non-empty values.