If that blanket `replaceProvider` semantic seems too weird btw, we could replace it with a dedicated API like `removeProvider(languageId, name)` so extensions could target the JSLint provider more specifically.  But it would be obsoleted as soon as you add the user-controlled enable/disable feature...

One last option as an even simpler, but hackier, throwaway fix would be to just hard-code some logic here that says whenever a provider is being registered for JS, we look for & remove the JSLint provider specifically.  Basically guaranteeing that extensions always override any built-in default Brackets linter without them having to do anything on their end.