Attempting to guess what the user might have wanted is the way to get spaghetti unextendable code resulting in unexpected result. E.g. grub-install C: already has a meaning: install to C PBR. Overloading it with other meanings will add ambiguity.

and observe that it copies modules before even establishing that /dev/bull is not an actual block device.

There's an opportunity for some "smart" behaviour here: for example, when given a directory (instead of a device node) as the installation target argument, GRUB could use it as if it were passed as --boot-directory, and install itself to the underlying partition's disk. (For the mingw port, specifying a drive letter in this way would be less awkward than using paths like \\?\PhysicalDrive0.) But this is just a suggestion.

Also, grub-install could check whether a configuration file exists in the boot directory, and prompt the user to create one (or just prompt unconditionally).