For my install, I had multiple instances of clamd running (in order to have different databases loaded for different purposes) and the systemd sockets were throwing errors about other processes using them, which in turn caused the additional instances of clamd service units to fail. However, the clamd service units started perfectly fine when the socket units were removed entirely since clamd creates the sockets if they're not present.
I'm not sure how those files get created, but it looks like it might be from the SysV Generator for SystemD. The best bet is to remove the /etc/init.d files and only use proper SystemD service unit files on systemd-based OS.
The Unit file that works for me is below. It's deployed by Puppet so please excuse the stuff inside <% %>. You could probably turn it into a SystemD service template and use instances instead, but I had issues getting those to be properly enabled inside SystemD and just went with separate service definitions for each of my instances.
--Maarten
[Unit]
Description=Clam AntiVirus daemon <%= $service_name %>
# Check for database existence
ConditionPathExistsGlob=/opt/clamav/share/<%= $service_name -%>/*.[hn]db
[Service]
ExecStart=/opt/clamav/clamav/sbin/clamd -c /opt/clamav/etc/<%= $service_name -%>.conf --foreground=true
# Reload the database
ExecReload=/bin/kill -USR2 $MAINPID
StandardOutput=syslog
TimeoutStartSec=420
[Install]
WantedBy=multi-user.target