For what it's worth, here is something I wrote some years back as part of a project I was working on. It's a bit low-tech, but I found it worked as intended. There is no error handling: The input is assumed to be valid. The custom *.dsd is returned as a temporary file which can then be passed to the "-publish" command.
;;===========================================================================;;
;; MKDSD IS A UTILITY WHICH WILL CONSTRUCT A DRAWING SET DESCRIPTION FILE ;;
;; (*.DSD) FOR CONFIGURATION OF THE "PUBLISH" COMMAND ;;
;; ;;
;; ARGUMENTS: LST -> A LIST - OR LIST OF LISTS - COMPRISED OF: ;;
;; 1) SHEET NAME (STR); USUALLY THE NAME OF THE DRAWING ;;
;; 2) FULL DRAWING PATH (STR), INCLUDING FILE NAME ;;
;; 3) LAYOUT NAME (STR) ;;
;; 4) PAGE SETUP (STR); NOTE - EMPTY STRING IF PAPERSPACE ;;
;; 5) SHEET PATH (STR); TYPICALLY THE SAME AS DRAWING PATH ;;
;; TYP -> AN INTEGER, INDICATING THE TYPE OF OUTPUT: ;;
;; 0 - DWF, SINGLE SHEETS ;;
;; 1 - DWF, MULTI-SHEET ;;
;; 2 - PRINTER SPECIFIED IN PAGE SETUP ;;
;; 3 - DWFX, SINGLE SHEETS ;;
;; 4 - DWFX, MULTI-SHEET ;;
;; 5 - PDF, SINGLE SHEET ;;
;; 6 - PDF, MULTI-SHEET ;;
;; DWF -> OUTPUT (STR) - FULL PATH/NAME FOR MULTI-SHEET FILE ;;
;; OUT -> OUTPUT (STR) - PATH ONLY FOR SINGLE SHEET FILES ;;
;; (NAMES TAKEN FROM INDIVIDUAL SHEET ;;
;; NAMES, PER LST ARGUMENT, ABOVE) ;;
;; VF -> BOOLEAN - INDICATES WHETHER TO OPEN GENERATED FILE ;;
;;===========================================================================;;
(defun mkdsd (lst typ dwf out vf / D-S-D FIL FLDSD I S X Y)
(setq d-s-d (open (setq fil (vl-filename-mktemp "foo.dsd")) "w"))
; FLDSD CONSTRUCTS STRINGS BASED ON THE LST ARGUMENT,
; TO BE WRITTEN INTO THE DSD.
(defun fldsd (strlst / )
(mapcar '(lambda (s) (write-line s d-s-d))
(append
(mapcar '(lambda (x y) (vl-string-subst x "\|/" y))
strlst
(list "[DWF6Sheet:\|/]"
"DWG=\|/"
"Layout=\|/"
"Setup=\|/"
"OriginalSheetPath=\|/"
); list
); mapcar
(list "Has Plot Port=0" "Has3DDWF=0")
); append
); mapcar
); defun
(mapcar '(lambda (i) (write-line i d-s-d))
(list "[DWF6Version]"
"Ver=1"
"[DWF6MinorVersion]"
"MinorVer=1"
); list
); mapcar
(if (listp (car lst))
(mapcar 'fldsd lst)
(fldsd lst)
); if
(mapcar '(lambda (i) (write-line i d-s-d))
(list "[Target]"
(strcat "Type=" (itoa typ))
(strcat "DWF=" dwf)
(strcat "OUT=" out)
"PWD="
"[MRU block template]"
"MRU=0"
"[MRU Local]"
"MRU=0"
"[MRU Sheet List]"
"MRU=0"
"[AutoCAD Block Data]"
"IncludeBlockInfo=0"
"BlockTmplFilePath="
"[SheetSet Properties]"
"IsSheetSet=FALSE"
"IsHomogeneous=FALSE"
"SheetSet Name="
"NoOfCopies=1"
"PlotStampOn=FALSE"
(strcat "ViewFile=" (if vf "TRUE" "FALSE"))
"JobID=0"
"SelectionSetName="
(strcat "AcadProfile=" (getvar "cprofile"))
"CategoryName="
"LogFilePath="
"IncludeLayer=FALSE"
"LineMerge=FALSE"
"CurrentPrecision="
"PromptForDwfName=FALSE"
"PwdProtectPublishedDWF=FALSE"
"PromptForPwd=FALSE"
"RepublishingMarkups=FALSE"
"PublishSheetSetMetadata=FALSE"
"PublishSheetMetadata=FALSE"
"3DDWFOptions=0 1"
); list
); mapcar
(close d-s-d)
fil
); defun