lpinfo -v lists discovered printers. It does this by running cups-deviced, which in turns runs each backend from /usr/lib/cups/backend with no arguments. As per backend(7), backends will print information about discovered devices to standard out. cups-deviced can also be run by hand:
/usr/lib/cups/daemon/cups-deviced 1 0 15 "$(id -u lp)" reqeuested-attributes=all | cat -v
Doesn't do discovery itself, but printers can be discovered by running ippfind:
$ ippfind -T 5 ipp://dell2330.local:631/prt0
This asks Avahi to list services of several recognized types (_ipp.tcp, _printer.tcp, &c).
$ avahi-browse -r _ipp._tcp -t + enp0s3 IPv4 Dell 2330dn Laser Printer Internet Printer local = enp0s3 IPv4 Dell 2330dn Laser Printer Internet Printer local hostname = [dell2330.local] address = [192.168.0.6] port =  txt = ["rp=prt0" "adminurl=http://dell2330.local" "pdl=application/postscript" "note=" "product=(Dell 2330dn Laser Printer)"]
When it is time to print to this URL, the ipp backend ends up calling httpAddrGetList (via backendLookup) which uses getaddrinfo to resolve the host from the URL. So if the system resolver can't handle mDNS then CUPS won't be able to connect to that printer.
Perhaps for that reason, CUPS prefers the dnssd backend:
$ lpinfo -v ... network dnssd://Dell%202330dn%20Laser%20Printer._pdl-datastream._tcp.local/ ...
This queries Avahi for services of several recognized types, coalescing duplicates by priority and then by type, which is why _pdl-datastream._tcp is chosen over the alternatives--it has a higher value in the cups_devtype_t enum.
cups.postinst hardlinks this backend to mdns if it is enabled. Perhaps for backwards compatibility with an older URL scheme?
Because _httpResolveURI is called with _HTTP_RESOLVE_FQDN set, the resulting URL uses an ip address instead of a host name. So dnssd://some%20printer._pdl-datastream._tcp.local/ becomes socket://18.104.22.168:9100/. Without this, it would become socket://dell2330.local:9100/ which would require support from the system resolver, thus making the dnssd backend pointless.